home *** CD-ROM | disk | FTP | other *** search
/ Aminet 51 / Aminet 51 (2002)(GTI - Schatztruhe)[!][Oct 2002].iso / Aminet / dev / c / minigl.lha / MiniGL / src / glu.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-03-27  |  2.5 KB  |  88 lines

  1. /*
  2.  * $Id: glu.c,v 1.1.1.1 2000/04/07 19:44:51 tfrieden Exp $
  3.  *
  4.  * $Date: 2000/04/07 19:44:51 $
  5.  * $Revision: 1.1.1.1 $
  6.  *
  7.  * (C) 1999 by Hyperion
  8.  * All rights reserved
  9.  *
  10.  * This file is part of the MiniGL library project
  11.  * See the file Licence.txt for more details
  12.  *
  13.  */
  14. #include "sysinc.h"
  15.  
  16. #include <mgl/gl.h>
  17. #include <math.h>
  18.  
  19.  
  20. #include <stdio.h>
  21.  
  22.  
  23. #define VEC_NORM(v)                                      \
  24. {                                                        \
  25.     GLfloat m = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); \
  26.     v[0] /= m;                                           \
  27.     v[1] /= m;                                           \
  28.     v[2] /= m;                                           \
  29. }
  30.  
  31. #define VEC_CROSS(v, a, b)                               \
  32.     v[0] = a[1] * b[2] - a[2] * b[1];                    \
  33.     v[1] = a[2] * b[0] - a[0] * b[2];                    \
  34.     v[2] = a[0] * b[1] - a[1] * b[0];
  35.  
  36. #define VEC_SUB(v, a, b)                                 \
  37.     v[0] = a[0] - b[0];                                  \
  38.     v[1] = a[1] - b[1];                                  \
  39.     v[2] = a[2] - b[2];
  40.  
  41. #define VEC_ADD(v, a, b)                                 \
  42.     v[0] = a[0] + b[0];                                  \
  43.     v[1] = a[1] + b[1];                                  \
  44.     v[2] = a[2] + b[2];
  45.  
  46. #define VEC_PRINT(v)                                     \
  47.     printf("<%f, %f, %f>\n", v[0], v[1], v[2]);
  48.  
  49. static char rcsid[] = "$Id: glu.c,v 1.1.1.1 2000/04/07 19:44:51 tfrieden Exp $ ";
  50.  
  51.  
  52. void GLULookAt(GLfloat ex, GLfloat ey, GLfloat ez, GLfloat cx, GLfloat cy, GLfloat cz, GLfloat ux, GLfloat uy, GLfloat uz)
  53. {
  54.     GLfloat u[3], v[3], w[3];
  55.     GLfloat m[16];
  56.  
  57.     w[0] = ex - cx;     w[1] = ey - cy;     w[2] = ez - cz;
  58.     v[0] = ux;          v[1] = uy;          v[2] = uz;
  59.  
  60.     VEC_NORM(w);
  61.     VEC_CROSS(u, v, w);
  62.     VEC_CROSS(v, w, u);
  63.     VEC_NORM(u);
  64.     VEC_NORM(v);
  65.  
  66.     m[ 0] = u[0];   m[ 1] = v[0];   m[ 2] = w[0];   m[ 3] = 0.0;
  67.     m[ 4] = u[1];   m[ 5] = v[1];   m[ 6] = w[1];   m[ 7] = 0.0;
  68.     m[ 8] = u[2];   m[ 9] = v[2];   m[10] = w[2];   m[11] = 0.0;
  69.     m[12] = 0.0;    m[13] = 0.0;    m[14] = 0.0;    m[15] = 1.0;
  70.  
  71.     glMultMatrixf(m);
  72.     glTranslatef(-ex, -ey, -ez);
  73. }
  74.  
  75. void GLUPerspective(GLfloat fovy, GLfloat aspect, GLfloat znear, GLfloat zfar)
  76. {
  77.    GLfloat xmin, xmax, ymin, ymax;
  78.  
  79.    ymax = znear * tan(fovy * 0.008726646);
  80.    ymin = -ymax;
  81.    xmin = ymin * aspect;
  82.    xmax = ymax * aspect;
  83.  
  84.    glFrustum(xmin, xmax, ymin, ymax, znear, zfar);
  85. }
  86.  
  87.  
  88.